package com.jsbb.util.digest;

import org.springframework.util.Base64Utils;
import org.springframework.util.DigestUtils;

import java.util.Base64;

/**
 * 加密工具类
 * <p>
 * 常用加密类型
 * 1.对称加密
 * 加解密使用同一个秘钥。计算量小、加密速度快、效率高。常见算法有：DES、3DES、AES
 * <p>
 * 2.非对称加密
 * 相对于对称加密，非对称加密安全性更好。非对称加密使用公钥加密、私钥解密。缺点是加解密花费时间长、速度慢。常见算法有：RSA、ECC、DSA
 * <p>
 * 3.Hash算法（摘要算法）
 * Hash算法属于单向算法，不可逆。常见算法有：MD5、SHA
 *
 * @author w
 * @date 2021-03-05
 */
public class EncryptionUtils {

    public static void main(String[] args) {
        String s = "测试1";

        //JDK中加密工具类
        String jdkBase64 = Base64.getEncoder().encodeToString(s.getBytes());
        System.out.println("JDK中base64加密===" + jdkBase64);
        System.out.println("JDK中base64解密===" + new String(Base64.getDecoder().decode(jdkBase64)));

        System.out.println("JDK中M5加密===" + Md5Utils.encrypt(s));


        //Spring中加密工具类
        String springBase64 = new String(Base64Utils.encode(s.getBytes()));
        System.out.println("spring中base64加密===" + springBase64);
        System.out.println("spring中base64解密===" + new String(Base64Utils.decode(springBase64.getBytes())));

        System.out.println("spring中MD5加密===" + DigestUtils.md5DigestAsHex(s.getBytes()));


        //commons-codec中加密工具类
        String apacheBase64Encode = new String(org.apache.commons.codec.binary.Base64.encodeBase64(s.getBytes()));
        System.out.println("commons-codec中base64加密===" + apacheBase64Encode);
        String apacheBase64Decode = new String(org.apache.commons.codec.binary.Base64.decodeBase64(apacheBase64Encode.getBytes()));
        System.out.println("commons-codec中base64解密===" + apacheBase64Decode);

        System.out.println("commons-codec中MD5加密===" + org.apache.commons.codec.digest.DigestUtils.md5Hex(s));

        System.out.println("commons-codec中SHA加密===" + org.apache.commons.codec.digest.DigestUtils.sha512Hex(s));
    }
}
